//
//  NormalController.m
//  TableView 封装
//
//  Created by Kevin on 17/11/1.
//  Copyright © 2017年 JOWO.team. All rights reserved.
//

#import "NormalController.h"

#import "KV_TableView.h"
#import "TestCell.h"
#import "TestModel.h"
#import "JCAlertView.h"

#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
@interface NormalController ()

@property (nonatomic, strong) KV_TableView *mainTableView;
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *refresh;

/**数据源数组*/
@property (nonatomic, copy) NSMutableArray *dataArray;
/**模型数组*/
@property (nonatomic, copy) NSMutableArray *modelArray;
@end

@implementation NormalController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    __block typeof(self) weakSelf = self;  // ** 排除对象释放延迟，这里可以不必使用weakSelf也不会引起内存泄漏，这里的两个block皆不是自持有类型，block执行完，block引用的外对象即被释放。 另外你这里__block修饰的，一般情况用__weak修饰，你这里加不加__block无所谓的，__block只是将weakSelf这个栈变量地址永久的保存在堆中而已，而你下面修改的是weakSelf.modelArray,而weakself地址还是不变的。
    // 正常初始化
    self.mainTableView = [[KV_TableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
    self.mainTableView.cellHeight = 60; // 设置行高
    [self.view addSubview:_mainTableView];
    
    [self.mainTableView addSubview:_refresh];
    // 模拟网络加载 延迟1秒执行
    [_refresh startAnimating];
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        
        [TestModel getModelRequestSuccess:^(NSMutableArray<TestModel *> *array) {
            if (array.count) {
                /**
                 *  当数据请求回来的时候 我们需要给 cell 赋值 并刷新视图
                 */
                [weakSelf.modelArray addObjectsFromArray:array];
                [_refresh stopAnimating];
                _refresh.hidden = YES;  // ** 这里尽量不要出现下划线这种，下划线优先是局部变量或作用域中寻找，如果找不到才会直接访问self对象中dataArray内存地址。如果在自持有block中这就会潜在内存泄漏。
                [weakSelf LoadDataWithArray:weakSelf.modelArray];
                
            }
        }];
        
    });
    
    // TableView 单条 cell 的点击事件
    [self.mainTableView clickCellWithBlock:^(NSIndexPath *index) {
        NSString *str = [NSString stringWithFormat:@"你点击了第%ld条",index.row];
        [JCAlertView showOneButtonWithTitle:@"你好" Message:str ButtonType:0 ButtonTitle:@"确认" Click: nil];
    }];
    
}

#pragma mark -- 刷新事件
- (void)LoadDataWithArray:(NSArray *)array{

    __block typeof(self) weakSelf = self;
    
    [self.dataArray removeAllObjects];
    
    for (int i = 0; i < array.count; i++) {
        
        NSIndexPath *index = [NSIndexPath indexPathForRow:i inSection:0];
        TestCell *cell     = [TestCell creatXibCellWithTarget:self index:index tableView:self.mainTableView model:array[i]];
        
        // 将创建好的 cell 加入数组
        [self.dataArray addObject:cell];
        
        // cell 上的删除点击事件
        [cell deleteCellWithIndex:^(NSInteger index) {
            
            TestCell *cell = (TestCell *)_dataArray[index];  // ** 这里需要将下划线变成 weakSelf,否则会引起内存泄漏。
            NSLog(@"你删除了---%@",cell.title.text);
            [weakSelf.dataArray removeObjectAtIndex:index];
            [weakSelf.modelArray removeObjectAtIndex:index];
            
            // 刷新数据
            [weakSelf LoadDataWithArray:weakSelf.modelArray];
        }];
    }
    
    [self.mainTableView setUpTheDataSourceWithArray:self.dataArray];
}
#pragma mark -- lazy load
- (NSMutableArray *)dataArray{
    if (!_dataArray) {
        _dataArray = [NSMutableArray array];
    }
    return _dataArray;
}
- (NSMutableArray *)modelArray
{
    if (!_modelArray) {
        _modelArray = [NSMutableArray array];
    }
    return _modelArray;
}

- (void)dealloc {
    NSLog(@"%s",__func__);
}

@end
